/**
 * 
 */
package com.baijia.tianxiao.push.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baijia.tianxiao.push.dao.mybatis.UserDeviceAttributeMapper;
import com.baijia.tianxiao.push.model.UserDeviceAttribute;
import com.baijia.tianxiao.push.service.UserDeviceAttributeService;

/**
 * @author leiruiqi
 *
 */

@Service("userDeviceAttributeService")
public class UserDeviceAttributeServiceImpl implements UserDeviceAttributeService {
 
	private static Logger logger = LoggerFactory.getLogger(UserDeviceAttributeServiceImpl.class); 
	
	private String separator = "|";
	@Resource
	private UserDeviceAttributeMapper userDeviceAttributeMapper;
	
	@Override
	public boolean addAttribute(String bizType, String userId, String deviceId,String attribute) {
		
		if(StringUtils.isBlank(attribute)){
			return false;
		}
		Map<String,String> map = null;
		try {
			map = JSON.parseObject(attribute, Map.class);
		} catch (Exception e) {
			logger.error("",e);
			return false;
		}
		String bizUserId = bizType+separator+userId;
		UserDeviceAttribute userDeviceAttribute = userDeviceAttributeMapper.findByDeviceAndBizUserId(deviceId, bizUserId);
		int effectRow = 0;
		if(userDeviceAttribute==null){
			
			userDeviceAttribute = new UserDeviceAttribute();
			userDeviceAttribute.setDeviceId(deviceId);
			userDeviceAttribute.setBizUserId(bizType+separator+userId);
			
			userDeviceAttribute.setAttribute(JSON.toJSONString(map));
			//userDeviceAttribute.setAttributeMap(attribute);
			
			userDeviceAttribute.setStatus(1);
			effectRow = userDeviceAttributeMapper.insert(userDeviceAttribute);
		}
		else{
			
			String attributeStr = userDeviceAttribute.getAttribute();
			
			JSONObject jo = JSON.parseObject(attributeStr);
			jo.putAll(map);			
			userDeviceAttribute.setAttribute(jo.toJSONString());	
			userDeviceAttribute.setStatus(1);
			effectRow = userDeviceAttributeMapper.updateAttributeAndStatus(userDeviceAttribute);
			
		}
		
		boolean bool =  effectRow==1;
		
		logger.info("userDevice addAttribute result:"+bool);
		
		return bool;
	}

	@Override
	public UserDeviceAttribute findByDeviceAndBizUserId(String bizType, String userId, String deviceId) {
		return userDeviceAttributeMapper.findByDeviceAndBizUserId(deviceId, bizType+separator+userId);
	}

	@Override
	public List<UserDeviceAttribute> queryByBizAndUserIdPrefix(String bizType, String userIdPrefix) {
		return userDeviceAttributeMapper.queryByBizAndUserIdPrefix(bizType+separator+userIdPrefix);
	}

	@Override
	public List<UserDeviceAttribute> queryByBizAndUserId(String bizType, String userId) {
		return userDeviceAttributeMapper.queryByBizAndUserId(bizType+separator+userId);
	}

	@Override
	public Map<String, UserDeviceAttribute> queryMapByBizAndUserIdPrefix(String bizType, String userIdPrefix) {
		List<UserDeviceAttribute>  list = queryByBizAndUserIdPrefix(bizType,userIdPrefix);
		Map<String, UserDeviceAttribute> map = new HashMap<String, UserDeviceAttribute>();
		for(UserDeviceAttribute model:list){
			map.put(model.getDeviceId(), model);
		}
		return map;
	}

	@Override
	public Map<String, UserDeviceAttribute> queryMapByBizAndUserId(String bizType, String userId) {
		List<UserDeviceAttribute>  list = queryByBizAndUserId(bizType,userId);
		Map<String, UserDeviceAttribute> map = new HashMap<String, UserDeviceAttribute>();
		for(UserDeviceAttribute model:list){
			map.put(model.getDeviceId(), model);
		}
		return map;
	}

	
}
